fix(i18n): unify terminology across locales and guard it (#7573) - #7574
Open
Romuald Lemesle (RomuDeuxfois) wants to merge 2 commits into
Open
fix(i18n): unify terminology across locales and guard it (#7573)#7574Romuald Lemesle (RomuDeuxfois) wants to merge 2 commits into
Romuald Lemesle (RomuDeuxfois) wants to merge 2 commits into
Conversation
Copilot started reviewing on behalf of
Romuald Lemesle (RomuDeuxfois)
August 24, 2026 09:49
View session
Contributor
There was a problem hiding this comment.
Pull request overview
This PR addresses issue #7573 by enforcing consistent, non-translatable terminology across all locales (including English) and by hardening user identity/credential update paths so that email/password cannot be changed through administrative “update user” routes.
Changes:
- Adds an i18n glossary (
scripts/i18n-glossary.json) and extendsi18n-checkerto fail CI when protected terms are translated. - Normalizes multiple locale strings (notably “Chokepoint”, severity labels, product/acronym terms) and fixes the legacy “Mitre Coverage” key usage by switching to “Security Coverage”.
- Removes tenant/platform-admin password change flows from frontend and backend, and ensures user email/password cannot be updated through profile updates.
Reviewed changes
Copilot reviewed 33 out of 33 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| openaev-front/src/utils/lang/zh.json | Terminology consistency updates (e.g., Chokepoint, CVE, URL, XTM Hub) and adds “Security Coverage” / “Very high”. |
| openaev-front/src/utils/lang/ru.json | Fixes severity/terminology inconsistencies and adds “Security Coverage” / “Very high”. |
| openaev-front/src/utils/lang/ko.json | Fixes severity/terminology inconsistencies and adds “Security Coverage” / “Very high”. |
| openaev-front/src/utils/lang/ja.json | Fixes severity/terminology inconsistencies and adds “Security Coverage” / “Very high”. |
| openaev-front/src/utils/lang/it.json | Fixes “asset” wording and other terminology consistency issues; adds “Security Coverage” / “Very high”. |
| openaev-front/src/utils/lang/fr.json | Terminology unification (notably “finding”, “endpoint”, “chokepoint”) and adds “Very high”. |
| openaev-front/src/utils/lang/es.json | Fixes terminology drift (e.g., ISPM) and adds “Security Coverage” / “Very high”. |
| openaev-front/src/utils/lang/en.json | Fixes legacy “Mitre Coverage” value and adds “Security Coverage” / “Very high”. |
| openaev-front/src/utils/lang/de.json | Fixes finance-domain “asset” translations and other terminology; adds “Security Coverage” / “Very high”. |
| openaev-front/src/admin/components/workspaces/custom_dashboards/widgets/WidgetUtils.tsx | Switches widget title from t('Mitre Coverage') to t('Security Coverage'). |
| openaev-front/src/admin/components/settings/users/tenant_users/UserPopover.tsx | Removes “Update password” action/Drawer wiring from tenant user popover. |
| openaev-front/src/admin/components/settings/users/tenant_users/UserPasswordForm.tsx | Deletes the tenant user password update form component. |
| openaev-front/src/admin/components/settings/users/tenant_users/UserForm.tsx | Disables email editing when updating an existing user (aligns UI with backend immutability). |
| openaev-front/src/admin/components/settings/users/tenant_users/TenantUsersTab.tsx | Removes “Update password” option from tenant users list actions. |
| openaev-front/src/admin/components/settings/users/tenant_users/hooks/useTenantUsers.ts | Removes tenant user password-change dispatch helper. |
| openaev-front/src/admin/components/settings/users/platform_users/PlatformUsersTab.tsx | Removes “Update password” option from platform users list actions. |
| openaev-front/src/admin/components/settings/users/platform_users/PlatformUserPopover.tsx | Removes platform user password-change dispatch and action wiring. |
| openaev-front/src/admin/components/settings/security_detail/UserDetail.tsx | Removes password-change action wiring from user detail popovers. |
| openaev-front/src/actions/users/User.js | Removes updateUserPassword action for /api/users/{id}/password. |
| openaev-front/src/actions/platform/users/platform-user-action.ts | Removes updatePlatformUserPassword action for /api/platform-users/{id}/password. |
| openaev-front/scripts/i18n-glossary.json | New glossary list of protected terms that must not be translated. |
| openaev-front/scripts/i18n-glossary.js | New glossary validation logic consumed by i18n-checker. |
| openaev-front/scripts/i18n-checker.js | Integrates glossary violations into the checker and fails CI accordingly. |
| openaev-api/src/test/java/io/openaev/rest/user/TenantUserApiTest.java | Adds tests asserting tenant scope has no password route and cannot “smuggle” password/email via update. |
| openaev-api/src/test/java/io/openaev/rest/PlayerApiTest.java | Adds test asserting player update cannot rewrite the email address. |
| openaev-api/src/main/java/io/openaev/service/UserService.java | Removes password mutation on update; makes email/password immutable via applyProfile. |
| openaev-api/src/main/java/io/openaev/service/tenants/TenantUserService.java | Removes tenant password update; prevents email rewrite by only applying profile fields. |
| openaev-api/src/main/java/io/openaev/rest/user/TenantUserApi.java | Removes tenant user password endpoint. |
| openaev-api/src/main/java/io/openaev/rest/user/PlayerApi.java | Prevents player email rewrite by applying only profile fields. |
| openaev-api/src/main/java/io/openaev/rest/user/form/user/UpdatePasswordInput.java | Deletes unused password update input DTO. |
| openaev-api/src/main/java/io/openaev/api/users/dto/UserOutput.java | Removes ALIAS_PLAIN_PASSWORD constant from output DTO. |
| openaev-api/src/main/java/io/openaev/api/users/dto/UserInput.java | Keeps plainPassword as input-only and relocates ALIAS_PLAIN_PASSWORD constant to input DTO. |
| openaev-api/src/main/java/io/openaev/api/platform/users/PlatformUserApi.java | Removes platform user password endpoint. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+27
to
+28
| for (const term of globalTerms) { | ||
| if (wordRe(term).test(key) && !value.toLowerCase().includes(term.toLowerCase())) { |
Add scripts/i18n-glossary.json, the list of terms that must never be translated, enforced by i18n-checker so a regression fails the check. Rename the legacy `Mitre Coverage` key to `Security Coverage`: en.json already displayed the latter, so every locale was translating a label whose key still said MITRE.
Romuald Lemesle (RomuDeuxfois)
force-pushed
the
fix/i18n-glossary-terminology
branch
from
August 24, 2026 10:00
ba59921 to
7902c46
Compare
Contributor
|
📖 Documentation check — ✅ Passed 10 functional file(s), 0 doc file(s) changed. No documentation gaps detected. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #7573
Adds
scripts/i18n-glossary.json, 19 terms that must never be translated, enforced byi18n-checker.WidgetUtils.tsxis touched to rename the legacyMitre Coveragekey toSecurity Coverage, whichen.jsonalready displayed.